﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;

namespace Urbini.Fabio._5BI.BattagliaNavale
{
    /// <summary>
    /// Logica di interazione per Window1.xaml
    /// Modifiche effettuate : InizioGioco.xaml --> Binding sulle 4 label
    /// Proprietà di BINDING e evento WindowLoaded
    /// </summary>
    public partial class Window1 : Window
    {
        Giocatore giocatore;

        public Window1()
        {
            InitializeComponent();
            List<int> IndiciGenerati = new List<int>();
            giocatore = new Giocatore(new Flotta());
        }

        // Ridisegna lo Stato del campo, sui pulsanti...
        private void Aggiorna(bool MappaVistaDaGiocatore)
        {
            Global.AggiornaColoreBottoni(GridPosizionamentoNavi, giocatore, MappaVistaDaGiocatore);
        }
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            DirezioneNave direzione = DirezioneNave.NonDefinito;
            TipoNave tipo = TipoNave.NonDefinito;
            int Grandezza = 0, Direzione = 0, x = -1, y = -1;
            Nave nave = null;
            try
            {
                Button b = sender as Button;
                if (b != null)
                {
                    x = Convert.ToInt32(b.Tag.ToString().Split(';')[0]);
                    y = Convert.ToInt32(b.Tag.ToString().Split(';')[1]);

                    // Selezione flag Grandezza
                    if ((bool)rdbUno.IsChecked) Grandezza = 1;
                    if ((bool)rdbDue.IsChecked) Grandezza = 2;
                    if ((bool)rdbTre.IsChecked) Grandezza = 3;
                    if ((bool)rdbQuattro.IsChecked) Grandezza = 4;

                    // Selezione flag Direzione
                    if ((bool)rdbSinistra.IsChecked) Direzione = 1;
                    if ((bool)rdbSu.IsChecked) Direzione = 2;
                    if ((bool)rdbDestra.IsChecked) Direzione = 3;
                    if ((bool)rdbGiu.IsChecked) Direzione = 4;

                    tipo = (TipoNave)Grandezza;
                    direzione = (DirezioneNave)Direzione;
                    nave = new Nave(tipo, new Posizione(x, y), direzione);
                    giocatore.flotta.Add(nave);
                }
            }
            catch (OutOfBattlefieldException ex)
            {
                MessageBox.Show(ex.Message);
            }
            catch (ShipsNumberException ex)
            {
                MessageBox.Show(ex.Message);
            }
            catch (ShipDuplicatedException ex)
            {
                MessageBox.Show(ex.Message);
            }
            catch (UndefinedShipException ex)
            {
                MessageBox.Show(ex.Message);
                if (direzione.HasFlag(DirezioneNave.NonDefinito)) direzione = DirezioneNave.Destra;
                nave = new Nave(tipo, new Posizione(x, y), direzione);
            }
            finally
            {
                // Aggiornamento della mappa e delle celle
                giocatore.mappa.Aggiorna(giocatore.flotta);
                Aggiorna(true);

                if (giocatore.flotta.FlottaPronta)
                {
                    MainWindow main = new MainWindow(giocatore);
                    main.ShowDialog();
                }
            }
        }
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            Global.AssegnaTag(GridPosizionamentoNavi);
            Aggiorna(true);

            // BINDING
            //Binding myBinding = new Binding("rNaviDaUno");
            //myBinding.Source = this;
            //lbl1.SetBinding(TextBlock.TextProperty, myBinding);
            //lbl1.SetBinding(TextBlock.DataContextProperty, myBinding);
        }

        private void btnConferma_Click(object sender, RoutedEventArgs e)
        {

        }

        // Proprietà per il DATA BINDING delle quattro label
        public string rNaviDaUno { get { return giocatore.flotta.NaviRimaste[TipoNave.DaUno].ToString(); } }
        public string rNaviDaDue { get { return giocatore.flotta.NaviRimaste[TipoNave.DaDue].ToString(); } }
        public string rNaviDaTre { get { return giocatore.flotta.NaviRimaste[TipoNave.DaTre].ToString(); } }
        public string rNaviDaQuattro { get { return giocatore.flotta.NaviRimaste[TipoNave.DaQuattro].ToString(); } }
    }
}